package top.duorhs.jspider.util;

import com.alibaba.fastjson2.JSONValidator;
import top.duorhs.jspider.constant.SpiderConstant;

/**
 * 一些工具方法
 *
 * @author Duorhs
 * @date 2023/1/10 16:52
 */
public class SpiderUtil {
    /**
     * 字符串是否为HTML
     *
     * @param str 字符串
     * @return boolean
     */
    public static boolean isHtml(String str) {
        return str.startsWith("<!DOCTYPE html") || str.startsWith("<!DOCTYPE HTML") || str.startsWith("<!DOCTYPE Html");
    }

    /**
     * 字符串是否为JSON
     *
     * @param str 字符串
     * @return boolean
     */
    public static boolean isJson(String str) {
        return JSONValidator.from(str).validate();
    }

    /**
     * 判断是否为同域url<br/>
     * 一般跳转链接有两种，以http/https开头的绝对路径，或者以/开头的相对路径
     *
     * @param url 目标url
     * @return 如果是，则返回完整URL路径，如果不是返回null
     */
    public static String toCurrentHost(String host, String url) {
        if (url.startsWith(host)) {
            return url;
        } else if (url.startsWith(SpiderConstant.URL_SEPARATOR)) {
            return host + url;
        } else {
            return null;
        }
    }

    /**
     * 从url中解析出域名体
     *
     * @param url url
     * @return 域名
     */
    public static String getHostInUrl(String url) {
        String tmp = url;
        if (url.startsWith(SpiderConstant.PREFIX_HTTP)) {
            tmp = tmp.substring(7);
        } else if (url.startsWith(SpiderConstant.PREFIX_HTTPS)) {
            tmp = tmp.substring(8);
        }
        return tmp.split(SpiderConstant.URL_SEPARATOR)[0];
    }

    /**
     * 从完整路径中截取出子路径
     *
     * @param host     host
     * @param wholeUrl 完整url
     * @return 截取后的url
     */
    public static String cutChildUrl(String host, String wholeUrl) {
        return wholeUrl.replaceFirst(host + SpiderConstant.URL_SEPARATOR, "");
    }
}
